#include "emailverify.h"
#include "ui_emailverify.h"
#include <QTimer>
#include <string>
#include <QDialog>
#include "api.h"
/**
 * @brief EmailVerify类的构造函数
 * @param parent 父窗口指针，用于指定父窗口对象
 */
EmailVerify::EmailVerify(QWidget *parent)
    : QDialog(parent)  // 初始化基类QDialog
    , ui(new Ui::EmailVerify)  // 初始化UI界面
{
    ui->setupUi(this);  // 设置UI界面


    // 初始化验证码计时器
    this->vtim.setInterval(500);  // 设置计时器间隔为500毫秒
    this->vtim.setSingleShot(false);  // 设置计时器为持续触发模式
    // 注释掉的代码：连接验证按钮的点击信号到对应的槽函数
    //connect(ui->btn_verify,&QPushButton::clicked,this,&EmailVerify::on_btn_verify_clicked);
    // 连接计时器的timeout信号到time_out槽函数，用于处理计时器超时事件
    connect(&vtim,&QTimer::timeout,this,&EmailVerify::time_out);
    // 连接登录按钮的点击信号到OnRequestForLogin槽函数，用于处理登录请求
    connect(ui->btn_Login,&QPushButton::clicked,this,&EmailVerify::OnRequestForLogin);
}

EmailVerify::~EmailVerify()
{
    delete ui;
}
/**
 * @brief 验证码倒计时处理函数
 * 当验证码按钮点击后，此函数会每秒被调用一次，用于更新按钮上显示的倒计时数字
 */
void EmailVerify::time_out(){
    // 更新按钮文本显示当前倒计时数值
    this->ui->btn_verify->setText(std::to_string(cnt).c_str());
    // 倒计时数值减1
    cnt--;
    // 当倒计时结束（cnt=-1）时
    if(cnt==-1){
        // 重置倒计时为60秒
        cnt = 60;
        // 停止定时器
        this->vtim.stop();
        // 恢复按钮文本为"验证码"
        this->ui->btn_verify->setText("验证码");
        // 启用验证码按钮，允许用户再次点击获取验证码
        ui->btn_verify->setEnabled(true);
    }
}
/**
 * @brief 邮箱验证类的验证按钮点击槽函数
 * 当用户点击验证按钮时触发此函数，用于请求验证码
 */
void EmailVerify::on_btn_verify_clicked(){
    ui->btn_verify->setEnabled(false);  // 禁用验证按钮，防止重复点击
    emit request_verify_code(ui->txt_email->text());  // 发送信号请求验证码，参数为输入的邮箱地址
    this->vtim.start();  // 启动计时器，用于验证码计时
}
/**
 * @brief EmailVerify类的登录请求处理函数
 * 当用户触发登录请求时调用此函数
 */
void EmailVerify::OnRequestForLogin()
{
    // 获取邮箱输入框中的文本内容
    QString email = ui->txt_email->text();
    // 获取验证码输入框中的文本内容
    QString veri = ui->txt_veri->text();
    // 发射登录请求信号，传递邮箱、验证码和当前窗口标识
    emit RequestForLogin(email,veri,"EmailVerify");
}
